在angular2项目的过程中,接触到了Rxjs这个东西,对它进行了一下简单的了解,对它的基本用法进行了学习和总结,介绍了:
- 基本概念
- 如何创建一个Observerble可观察序列
- Observer实例的生命周期
- 如何对Observer实例进行订阅?以及监听他的next、error、complete事件?
- rxjs交互图怎么看?
- map、filter、from等简单的操作符含义
它是什么
官方文档:http://reactivex.io/rxjs/
Rx
(ReactiveX
, Reactive Extensions
),它是微软开发和维护的基于响应式编程
(Reactive Programming
)范式实现的一套工具库集合,于2012年11月开源,它提供了一系列接口规范来帮助开发者方便的处理异步数据流。Rx系列结合了观察者模式、迭代器模式、函数式编程,它已成为业界响应式编程的优秀实践。
RxJs
就是Rx在JavaScript层面上的实现,除此之外还有RxJava、Rx.Net、RxSwift等等。
RxJs
全名Reactive Extensions for JavaScript
,翻译为Javascript的响应式扩展
, 它的思路是把随时间不断变化的数据、状态、事件等等转成可被观察的序列(Observable Sequence
),然后订阅序列中那些Observable对象的变化,一旦变化,就会执行事先安排好的各种转换和操作。
几个名词
Observable
: 可观察的数据序列
.Observer
: 观察者实例
,用来决定何时观察指定数据,只有在Rx.Observable.create创建方法可以获取Subscription
: 观察数据序列返回的订阅实例
.Operators
: Observable的操作符
,包括转换数据序列,过滤等,所有的Operators方法接受的参数是上一次发送的数据变更的值,而方法返回值我们称之为发射新数据变更
Observable
可以发射三种类型的事件:next
、error
、complete
Subscription
可以订阅三种类型的事件:onNext
onError
onComplete
Observable
有四个生命周期:创建 、订阅 、 执行 、销毁。
使用create创建一个Observable
const Rx = require('rxjs/Rx'); |
捕获error和complete
let source = Observable.create(observer=>{ |
rxjs交互图
- 每条线表示一个数据序列
- 每个球表示发送的数据变更,小竖线表示complete
- 方法下面表示经过map、filter等操作符处理过后产生的新序列
//序列1 |
操作符
map
:对要发送的data作统一处理后再返回filter
:满足条件时才发射出去toPromise
:将observer转为promisedebounce
:(防抖动)取一段时间内最新的数据throttle
:(防抖动) 忽略这段时间,发现新值后再发送
更多,如 mapTo, scan, from ,concat, concatAll, merge, mergeAll等
结束
angular2中的HTTP模块,ionic-native中的BLE模块都默认使用了Observable
还需要要研究:
- 他的使用场景?
- 与promise相比他的优势劣势是什么?
- 未来的使用趋势如何?
参考文章
官方文档:http://reactivex.io/rxjs/